package cn.fz.demo02.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@Controller
public class LoginController {
    @GetMapping("/login")
    public String login() {
        log.info("login");
        return "login"; // 返回名为 "login" 的模板或 HTML 页面
    }

    @GetMapping("/index")
    public String index() {
        log.info("index");
        return "index";  // 返回名为 "index" 的模板或 HTML 页面
    }

    /**
     * 5. 注销
     * 有登录，同样也提供了登出，默认情况下，Spring Security 会建立一个 /logout 端点，所以不需要额外的代码。
     * 当你包含 spring-boot-starter-security 依赖或使用 @EnableWebSecurity 注解时，Spring Security 将添加其注销支持，并默认响应 GET /logout 和 POST /logout。
     *
     * 注意，Spring Security 默认开启了防 CSRF 攻击，注销时需要提供 csrf_token，直接调用 GET /logout 会提示 404，只能能通过 POST 请求，
     * <form th:action="@{/logout}" method="post">
     *     <button type="submit">Logout</button>
     * </form>
     *
     * 如果强制要使用 GET 请求，则需要修改成以下配置形式：
     *    @Bean
     *     public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
     *         http
     *                 .csrf(Customizer.withDefaults())
     *                 .authorizeHttpRequests(auth -> auth
     *                         .requestMatchers("/").permitAll()  // 公开访问
     *                         .anyRequest().authenticated()  // 其他接口需认证
     *                 )
     *                 .formLogin(form -> form
     *                         .loginPage("/login")
     *                         .permitAll()
     *                 )
     *                 .logout((logout) -> logout
     *                         .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
     *                 )
     *                 .httpBasic(Customizer.withDefaults());  // 使用 HTTP Basic 认证
     *         return http.build();
     *     }
     *
     * @return
     */
    @ResponseBody
    @GetMapping("/admin")
    public String admin() {
        log.info("admin");
        return "欢迎进入管理页面";
    }

    @GetMapping("/home")
    public String home() {
        return "xss_demo";
    }

    @PostMapping("/submit")
    public String submit(@RequestParam String input, Model model) {
        model.addAttribute("input", input);
        return "xss_result";
    }
}
